package com.vehicle.mapper;

import com.vehicle.domains.entity.SysPermissionEntity;
import com.vehicle.domains.bo.QueryPermissionBo;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;

/**
 * 系统权限Mapper接口
 * 与SysPermissionMapper.xml映射，提供权限管理数据访问操作
 */
@Mapper
public interface SysPermissionMapper {

    /**
     * 新增权限
     * @param permission 权限实体类（包含权限名称、编码、类型等字段）
     * @return 影响行数（1：成功，0：失败）
     */
    int insertPermission(SysPermissionEntity permission);

    /**
     * 根据ID修改权限（非空字段才更新）
     * @param permission 权限实体类（必须包含id，可选填名称、类型、父ID等字段）
     * @return 影响行数（1：成功，0：失败/无变更）
     */
    int updatePermissionById(SysPermissionEntity permission);

    /**
     * 根据ID查询权限
     * @param id 权限ID
     * @return 权限实体类（包含完整字段）
     */
    SysPermissionEntity selectPermissionById(Long id);

    /**
     * 根据权限编码查询权限（用于唯一校验）
     * @param permissionCode 权限编码
     * @return 权限实体类（存在则返回，不存在则返回null）
     */
    SysPermissionEntity selectPermissionByCode(String permissionCode);

    /**
     * 分页查询权限列表（支持多条件筛选）
     * @param req 分页查询参数（包含名称、编码、类型、父ID等筛选条件）
     * @return 权限列表（按排序号和创建时间排序）
     */
    List<SysPermissionEntity> selectPermissionList(QueryPermissionBo req);

    /**
     * 根据ID删除权限
     * @param id 权限ID
     * @return 影响行数（1：成功，0：失败）
     */
    int deletePermissionById(Long id);

}
